/**========================================================================*
 *=========================================================================*
 *
 * @file                FlughafenInfo.java
 *
 * @copyright           TECCO Software Entwicklung AG
 *
 *=========================================================================*
 *=========================================================================*/


import java.util.Vector;

import corso.lang.*;


public class FlughafenInfo implements CorsoShareable
{
    private CorsoVarOid towerOid;
    private CorsoVarOid landebahnenOid;

    private int nLandebahnen;


    /**====================================================================* 
     * constructor: leere Info
     *=====================================================================*/  
    public FlughafenInfo () 
    {
        towerOid = new CorsoVarOid ();
        landebahnenOid = new CorsoVarOid ();
    }


    /**====================================================================* 
     * constructor: Info einlesen von OID
     *=====================================================================*/  
    public FlughafenInfo (CorsoVarOid oid) 
    {
        this ();
        try
        {
            System.out.println ("Einlesen der Flughafen Info");
            oid.readShareable (this, null, CorsoConnection.NO_TIMEOUT);
        }
        catch (Exception e)
        {
            System.out.println (e);
            System.exit (-5);
        }
    }


    /**====================================================================* 
     * constructor: neune Info anlegen mit n Landebahnen 
     *=====================================================================*/  
    public FlughafenInfo (int nLandebahnen, CorsoConnection con) 
    {
        this.nLandebahnen = nLandebahnen;
        try
        {
            towerOid = con.createVarOid (con.getCurrentStrategy ());
            landebahnenOid = con.createVarOid (con.getCurrentStrategy ());

            Landebahnen landebahnen = new Landebahnen (nLandebahnen, con);

            try
            {
                landebahnenOid.writeShareable (
                    landebahnen, CorsoConnection.INFINITE_TIMEOUT);
                towerOid.writeString (
                    CourseUtil.GESPERRT, CorsoConnection.INFINITE_TIMEOUT);
            }
            catch (CorsoException e2)
            {
                System.out.println (e2);
                System.exit (-6);
            }
        }
        catch (CorsoException e1)
        {   
            System.out.println (e1);
            System.exit (-7);
        }
    }


    /**====================================================================* 
     * constructor: einlesen der Info aus bestehendem Flughafen
     *=====================================================================*/  
    public FlughafenInfo (String flughafenName, String site, 
                          CorsoConnection con)
    {
        towerOid = new CorsoVarOid ();
        landebahnenOid = new CorsoVarOid ();

        // get the named object for Flughafen
        CorsoVarOid namedOid = new CorsoVarOid ();
        
        try
        {
            namedOid = con.getNamedVarOid (flughafenName,
                                           site,
                                           null,
                                           false,
                                           CorsoConnection.NO_TIMEOUT);

            // read FlughafenInfo
            namedOid.readShareable (this, null, CorsoConnection.NO_TIMEOUT);
        }
        catch (CorsoException e1)
        {
            System.exit (-8);
        } 
    }


    /**====================================================================* 
     * tower info setzen und schreiben
     *=====================================================================*/  
    public void setTowerStatus (String status)
    {
        System.out.println ("Tower Status OID = " + towerOid);
        try
        {
            towerOid.writeString (status, CorsoConnection.INFINITE_TIMEOUT);
            System.out.println ("Tower Status := " + status);
        }
        catch (CorsoException e2)
        {
            System.out.println (e2);
            System.exit (-1);
        }
    }
    

    /**====================================================================* 
     * get status
     *=====================================================================*/  
    public String getStatus ()
    {
        String status = null;
        try
        {
            CorsoConnection con = towerOid.getConnection ();
            CorsoTopTransaction tx = con.createTopTransaction ();
            towerOid.setTimeStamp (0);
            status = towerOid.readString (tx, 
                                          CorsoConnection.INFINITE_TIMEOUT);
            tx.commit (CorsoConnection.INFINITE_TIMEOUT);
        }
        catch (Exception e)
        {
            System.exit (-11);
        }
        return status;
    }

    
    /**====================================================================* 
     * get tower oid
     *=====================================================================*/  
    public CorsoVarOid getTowerOid ()
    {
        return towerOid;
    }

    
    /**====================================================================* 
     * get Landebahnen Oids
     *=====================================================================*/  
    public Vector getLandebahnenOids ()
    {
        Landebahnen landebahnen = new Landebahnen (landebahnenOid);   
        return landebahnen.getLandebahnenOids ();
    }


    /**====================================================================* 
     * write
     *=====================================================================*/  
    public void write (CorsoData data) throws CorsoDataException
    {
        data.putStructTag ("flughafeninfo", 2);
        data.putShareable (towerOid);
        data.putShareable (landebahnenOid);
    }


    /**====================================================================* 
     * read
     *=====================================================================*/  
    public void read (CorsoData data) throws CorsoDataException
    {
        StringBuffer structName = new StringBuffer ();
        int arity = data.getStructTag (structName);
        if (arity != 2)
            throw new CorsoDataException ();
        data.getShareable (towerOid);
        data.getShareable (landebahnenOid);
    }
}



/**========================================================================*
 *=========================================================================*
 * EOF FlughafenInfo.java
 *=========================================================================*
 *=========================================================================*/
